package draw;

import javax.swing.*;
import java.awt.*;

/**
 * @author DCSGO
 * @version 1.0
 * 绘制一个圆
 * <p>
 * 绘图原理
 * Component类提供了两个和绘图相关最重要的方法:
 * 1. paint(Graphics g)绘制组件的外观
 * 2. repaint()刷新组件的外观
 * 当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法类绘制组件
 * 在以下情况paint()也将会被调用:
 * 1. 窗口最小化再最大化
 * 2. 窗口的大小发生变化
 * 3. repaint函数被调用
 */

//JFrame 图画框架 (窗口)
public class DrawCircle extends JFrame {
    private MyPanel mp = null;

    public static void main(String[] args) {
        new DrawCircle();
    }

    public DrawCircle() {
        mp = new MyPanel();

        //设置窗口是否可见
        this.setVisible(true);

        //设置窗口大小
        this.setSize(400, 500);

        //添加画板
        this.add(mp);

        //设置默认关闭操作(关闭窗口时的操作) JFrame.EXIT_ON_CLOSE -> 关闭窗口时退出
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}

//JPanel 画板
class MyPanel extends JPanel {
    @Override   //paint 绘画 Graphics -> 图像 图案 绘图 图样
    public void paint(Graphics g) {
        super.paint(g);
        //将一个圆 以它对应的外切矩形的左上角定位 绘制在 画板的x y处 该矩形 宽 width 高 height
        g.drawOval(10, 10, 100, 100);
        System.out.println("调用了 paint");
    }
}